package br.edu.univas.jobmanager.view;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import br.edu.univas.jobmanager.controller.ControllerAdicionarTarefa;
import br.edu.univas.jobmanager.controller.ControllerPrincipal;
import br.edu.univas.jobmanager.entity.Tarefa;
import br.edu.univas.jobmanager.exception.ObjectNotFoundException;
import br.edu.univas.jobmanager.listener.ButtonListener;

public class FrameAdicionarTarefa extends JFrame implements ButtonListener {
	private static final long serialVersionUID = 1L;
	private static final int EDIT_MODE = 0;
	private static final int INSERT_MODE = 1;
	private PanelDadosTarefa panelDados;
	private PanelGravarLimparButtons panelButtons;
	private int modo;

	private ControllerAdicionarTarefa _controller;
	private Tarefa tarefa = null;

	public FrameAdicionarTarefa(ControllerPrincipal _controllerPrincipal) {
		super("Adicionar Tarefa");
		this._controller = new ControllerAdicionarTarefa(this,
				_controllerPrincipal);
		//modo adicionar tarefa;
		modo = INSERT_MODE;
		initialize();
	}

	public FrameAdicionarTarefa(Tarefa tarefa,ControllerPrincipal _controller) {
		super("Editar Tarefa");
		this._controller = new ControllerAdicionarTarefa(this, _controller);
		this.tarefa = tarefa;
		//Edit mode;
		modo = EDIT_MODE;
		initialize();
		
	}

	private void initialize() {
		setResizable(false);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setLocationRelativeTo(null);
		add(getPanelDados(), BorderLayout.CENTER);
		add(getPanelButtons(), BorderLayout.SOUTH);
		pack();

	}

	private PanelDadosTarefa getPanelDados() {
		if (panelDados == null) {
			try {
				panelDados = new PanelDadosTarefa(_controller.getBoxModel(),_controller.getAbertoEstado());
				if(modo == EDIT_MODE && tarefa !=null){
					panelDados.setDados(tarefa);
				}
			} catch (ObjectNotFoundException e) {
				JOptionPane.showMessageDialog(this,"Erro feche ao pegar o estado \"Aberto\" no banco");
			}
		}
		return panelDados;
	}

	private PanelGravarLimparButtons getPanelButtons() {
		if (panelButtons == null) {
			panelButtons = new PanelGravarLimparButtons();
			if(modo == EDIT_MODE){
				panelButtons.setListener(_controller.getButtonAlterarListener());
			}else{
				panelButtons.setListener(_controller.getButtonsListener());
			}
		}
		return panelButtons;
	}

	public void setNomeTarefa(String nome) {
		getPanelDados().setNomeTarefa(nome);
	}

	@Override
	public void gravarAction() {
		Tarefa tarefa = getPanelDados().getDados();
		if (tarefa != null) {
			_controller.insereTarefa(tarefa);
			int op = JOptionPane
					.showConfirmDialog(null,
							"Tarefa adicionada com sucesso!\n deseja adicionar outra tarefa?",
							"Confirma?", JOptionPane.YES_NO_OPTION);
			if (op == JOptionPane.YES_NO_OPTION) {
				limparAction();
			} else {
				dispose();
			}
		}
	}

	@Override
	public void limparAction() {
		getPanelDados().limpar();

	}

	@Override
	public void atualizarAction() {
		Tarefa tarefa = getPanelDados().getDados();
		if(tarefa!=null){
			_controller.atualizaTarefa(tarefa);
			JOptionPane.showMessageDialog(this, "Tarefa atualizada!\n");
			dispose();
		}
	}
}
